package crawler;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;

//管理数据的类
public class DataStorage {
    private static final String DATA_DIR = "data/";

    //接收一个用户名username和一个爬取结果对象result作为参数，用于将爬取结果保存到文件中
    public void saveData(String username, CrawlResult result, String setfilename) throws IOException {
        //构建用户数据存储的目录路径并创建目录
        String userDir = DATA_DIR + username + "/";
        new File(userDir).mkdirs();
        String filename;
        if(setfilename == null){
            filename = userDir + result.getTitle() + ".txt";
        }else{
            filename = userDir + setfilename + ".txt";
        }

        try (PrintWriter out = new PrintWriter(filename)) {
            out.println("Title: " + result.getTitle());//将爬取结果的标题写入文件
            out.println("Links:");//写入一个链接列表的标题
            result.getLinks().forEach(out::println);//使用forEach方法遍历爬取结果中的链接列表，并将每个链接逐行写入文件
        }
    }
    //接受用户名来查询历史记录的方法
    //待实现：
    //查询记录后更改文件名（或者在确认保存后询问是否改名）
    //新增方法用于修改
    //删除记录
    public List<String> listHistory(String username) {
        File userDir = new File(DATA_DIR + username);
        if (!userDir.exists()) return new ArrayList<>();

        return Arrays.stream(userDir.listFiles())
                .sorted(Comparator.reverseOrder())
                .map(File::getName)
                .collect(Collectors.toList());
    }
    // 通过用户名和文件名定位，读取历史文件内容
    public String getHistoryContent(String username, String filename) throws IOException {
        //利用StringBuilder类可读取文件内容
        StringBuilder content = new StringBuilder();
        //BufferedReader读取字符流
        //FileReader用于从文件中读取字符流
        //DATA_DIR + username + "/" + filename构建了读取文件的路径
        try (BufferedReader reader = new BufferedReader(new FileReader(DATA_DIR + username + "/" + filename))) {
            String line;
            //遍历文件
            while ((line = reader.readLine()) != null) {
                //把读取内容加入content储存后return
                content.append(line).append("\n");
            }
        }
        return content.toString();
    }

    public void renameFile(String username, String oldFilename, String newFilename) {
        File oldFile = new File(DATA_DIR + username + "/" + oldFilename);
        File newFile = new File(DATA_DIR + username + "/" + newFilename + ".txt");
        oldFile.renameTo(newFile);
        System.out.println("更改成功！");
    }

    public void deleteFile(String username, String filename) {
        File file = new File(DATA_DIR + username + "/" + filename);
        file.delete();
        System.out.println("已删除！");
    }
}
